Python GUI:PyQt之多线程2

您所在的位置:网站首页 pyqt qthread线程安全退出 Python GUI:PyQt之多线程2

Python GUI:PyQt之多线程2

2023-04-21 04:36| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

续上篇,本文用另外一种方法实现PyQt GUI程序的多线程,也就是moveToThread方法。还是那个简单的逻辑:点击“开始”按钮后,文本框中每隔2秒追加打印出“Python小黑”。

第一步,新建myobject.py文件,定义继承自QtCore.QObject的类MyObject,在该类中定义一个信号update_text_singal,以及函数work(),在函数work()中进行永久循环,每隔2秒并发射信号。与使用继承QThread重写run函数不同,这里的函数名work不是固定的,可自定义。代码很简单,如下图:

第二步,编辑mainform.py文件,前面的操作不变,即在类MainForm中,定义函数update_text,用以更新文本框的内容;在类的初始化函数中将“开始”按钮的clicked信号连接至类的dowork槽函数。

主要的变化是dowork函数,首先实例化MyObject类的变量obj,将obj的信号update_text_singal连接至槽函数update_text,用于更新文本框的内容;其次,实例化MyThread类的变量mythread,使用moveToThread函数将对象obj移入线程mythread;最后,将线程mythread的信号started连接至对象obj的work函数,启动线程。线程启动后,即发射started信号,通知执行obj的work函数,work函数有我们需要的逻辑。代码如下图:

运行结果:

总结一下,本文使用了moveToThread方法实现了多线程,简单来说就是将QObject子类作为对象移动至线程QThread里,然后通过线程的started信号激活QObject子类的业务逻辑。需要注意的是,在业务逻辑结束后,线程并不会自动退出,以后我们会看到这一点。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3